package com.ruoyi.web.rmNew.service;

import com.ruoyi.web.core.config.ConfigLoader;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author xiesm
 * @Description: TODO
 * @date 2025-11-07 19:06
 */
@Slf4j
@Service
public class RmGameUpdateTimeService {
    @Autowired
    private ConfigLoader configLoader;


    // 在类中添加可配置的更新规则
    private static final Map<Integer, Integer> UPDATE_RULES = new HashMap<Integer, Integer>() {{
        put(4, 10);  // 4小时内，10分钟更新周期
        put(5, 20);  // 5小时内，20分钟更新周期
        put(6, 25);  // 6小时内，25分钟更新周期
        put(7, 30);  // 7小时内，30分钟更新周期
        put(8, 30);  // 8小时内，30分钟更新周期
    }};

    public boolean shouldUpdateFile(String filePath, String game) {
        File file = new File(filePath);
        try {
            // 解析game字符串中的时间，格式为"63160717.1	泰超	2025-11-07 20:00	巴蜀府	南奔勇士"
            String[] parts = game.split("\t");
            if (parts.length >= 3) {
                String timeStr = parts[2]; // 获取时间部分 "2025-11-07 20:00"
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                Date gameTime = sdf.parse(timeStr);

                long currentTime = System.currentTimeMillis();
                long gameTimeMillis = gameTime.getTime();

                // 计算距离比赛开始的时间（小时）
                long hoursToGame = Math.abs(currentTime - gameTimeMillis) / (1000 * 60 * 60);

                // 获取对应的更新周期（分钟）
                int updatePeriod = getUpdatePeriod((int) hoursToGame);

                // 判断文件是否超过更新周期
                long lastModifiedTime = file.lastModified();
                boolean boo = (currentTime - lastModifiedTime) >= (updatePeriod * 60 * 1000);
                log.info("{}, 超更新时间:{}", game, boo);
                return boo;
            }
        } catch (Exception e) {
            log.warn("解析比赛时间失败: {}", game, e);
        }

        // 默认行为：检查60分钟内是否修改
        long lastModifiedTime = file.lastModified();
        long currentTime = System.currentTimeMillis();
        return (currentTime - lastModifiedTime) > (60 * 60 * 1000);
    }

    private int getUpdatePeriod(int hoursToGame) {
        // 按照配置规则获取更新周期
        for (Map.Entry<Integer, Integer> entry : UPDATE_RULES.entrySet()) {
            if (hoursToGame <= entry.getKey()) {
                return entry.getValue();
            }
        }
        // 如果超过最大配置时间，返回默认周期
        return 60;
    }


}
